创建型-工厂方法模式

概念

Factory Method Pattern:又称工厂模式,不同的工厂子类创建不同的产品对象。

img

与简单工厂的区别

简单工厂是一个工厂生产不同的产品,工厂模式是对工厂抽象化,不同的产品由专门的具体工厂来生产。比如可口可乐工厂专门生产可口可乐

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 可乐抽象类
class Cola {
//
}
// 工厂抽象类
class Factory {
creatCola() {
return new Cola();
}
}


// 可口可乐工厂
class CocaColaFactory extends Factory {
creatCola() {
return new CocaCola();
}
}
// 可口可乐产品类
class CocaCola extends Cola {
product (type) {
return `生产可口可乐`
}
}

// 百世可乐工厂
class PesiColaFactory extends Factory {
creatCola() {
return new PesiCola();
}
}
// 百世可乐产品类
class PesiCola extends Cola {
product (type) {
return `生产百世可乐`
}
}

// 生产可口可乐
let cocaCola = new CocaColaFactory().creatCola();
// 生产百世可乐
let pesiCola = new PesiColaFactory().creatCola();

优点

  • 用户不需要关系产品的创建细节,也不需要知道具体产品类的类名,只需要关心其所需产品对应的具体工厂是哪一个即可
  • 当系统加入新产品,只需要添加一个具体工厂和其对应的具体产品即可,符合开闭原则

缺点

  • 当添加新产品时,需要提供新的产品类和具体工厂类,因此系统中类的个数成对增加,增加了系统的复杂度